﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using CPTECH.Business;
using CPTECH.Repository;
using System.IO;

namespace CPTECH.Presentation
{
    public partial class frm_fisico2 : frm_default
    {
        frm_fisico fisicoReceive = new frm_fisico();
        int ficContator = 0;

        public frm_fisico2(frm_fisico fisicoSend)
        {
            fisicoReceive = fisicoSend;
            InitializeComponent();
        }

        //limpa array de ficticios e volta para o form anterior.
        private void mnu_voltar_Click(object sender, EventArgs e)
        {
            FisicoBO.getInstance().ficticios.Clear();
            this.closeForm();//usa o método herdado para voltar ao form anterior.
        }

        //chama método que salva os arquivos na base.
        private void mnu_salvar_Click(object sender, EventArgs e)
        {
            if (checkCampos())
            {
                saveRegister();
            }
        }

        //métódo que verifica se são ficticios ou serial unico e salva na base.
        private void saveRegister()
        {
            mnu_salvar.Enabled = false;
            mnu_voltar.Enabled = false;

            ArrayList ficticios = FisicoBO.getInstance().ficticios;

            string cdFisPat = FisicoBO.getInstance().plaqueta;
            Int64 idSeq = FisicoBO.getInstance().idBem;
            string cdFilial = FisicoBO.getInstance().codFilial;
            String codLocal = FisicoBO.getInstance().codLocal;
            string codDepto = FisicoBO.getInstance().codDepto.ToString();
            string codCcusto = FisicoBO.getInstance().codCcusto.ToString();
            string codPlanta = FisicoBO.getInstance().codPlanta.ToString();
            String os = FisicoBO.getInstance().os;

            string patAntigo = FisicoBO.getInstance().patAntigo;
            string codItem = FisicoBO.getInstance().codItem;
            string dsItem = FisicoBO.getInstance().dsItem;
            string marca = FisicoBO.getInstance().marca;
            string modelo = FisicoBO.getInstance().modelo;
            string padrao = FisicoBO.getInstance().padrao;
            string idPalm = FisicoBO.getInstance().idPalm;

            string cdFisInc = "0";
            string status = "1";
            string capacidade = txt_capacidade.Text;
            string complemento = txt_complemento.Text;
            string nrFabricacao = txt_serial.Text; // serial
            string dtEstimada = txt_dataEstimada.Text;
            string livre1 = txt_livre1.Text;
            string livre2 = txt_livre2.Text;
            string livre3 = txt_livre3.Text;
            string livre4 = txt_livre4.Text;

            string date = DateTime.Now.ToString("dd/MM/yyyy hh:mm");
            string partNumber = txt_partNumber.Text;
            string situacao = cbo_situacao.SelectedItem.ToString();
            string tag = txt_tag.Text;
            string dtReal = txt_dataReal.Text;
            string fornecedor = txt_fornecedor.Text;
            string enviado = "0";

            if (ficticios != null && cdFisPat == "")
            {
                if (ficContator < ficticios.Count)
                {
                    if (ficContator != (ficticios.Count -1))
                    {
                        cdFisPat = lbl_ficticio.Text.Trim();

                        FisicoDB.getInstance().insertNewFisico(idSeq, cdFilial, cdFisPat, cdFisInc, status, codPlanta, codDepto, codCcusto, codLocal, codItem,
                                                                    dsItem, marca, modelo, capacidade, complemento, nrFabricacao, dtEstimada, livre1, livre2, livre3,
                                                                    livre4, idPalm, date, os, patAntigo, partNumber, situacao, tag, padrao, dtReal, fornecedor, enviado);
                        idSeq++;

                        FisicoBO.getInstance().idBem = idSeq;
                        putLastID(idSeq.ToString());

                        ficContator++;
                        clear();
                        changeFic(ficticios, ficContator);

                        //Registra log de inserção.
                        RegisterBO.getInstance().registerInclude(cdFisPat);

                        MessageBox.Show("item gravado com sucesso!", "Novo Item");                        
                    }
                    else 
                    {
                        cdFisPat = lbl_ficticio.Text.Trim();

                        FisicoDB.getInstance().insertNewFisico(idSeq, cdFilial, cdFisPat, cdFisInc, status, codPlanta, codDepto, codCcusto, codLocal, codItem,
                                                                    dsItem, marca, modelo, capacidade, complemento, nrFabricacao, dtEstimada, livre1, livre2, livre3,
                                                                    livre4, idPalm, date, os, patAntigo, partNumber, situacao, tag, padrao, dtReal, fornecedor, enviado);
                        idSeq++;

                        FisicoBO.getInstance().idBem = idSeq;
                        putLastID(idSeq.ToString());
                        MessageBox.Show("item gravado com sucesso!", "Novo Item");

                        //Registra log de inserção.
                        RegisterBO.getInstance().registerInclude(cdFisPat);

                        back();
                    }
                }
            }

            else
            {
                cdFisPat = FisicoBO.getInstance().plaqueta;

                FisicoDB.getInstance().insertNewFisico(idSeq, cdFilial, cdFisPat, cdFisInc, status, codPlanta, codDepto, codCcusto, codLocal, codItem,
                                                        dsItem, marca, modelo, capacidade, complemento, nrFabricacao, dtEstimada, livre1, livre2, livre3,
                                                        livre4, idPalm, date, os, patAntigo, partNumber, situacao, tag, padrao, dtReal, fornecedor, enviado);
                putLastID(idSeq.ToString());
                MessageBox.Show("iten gravado com sucesso!","Novo Item");
                back();
            }

            mnu_salvar.Enabled = true;
            mnu_voltar.Enabled = true;
        }

        //grava ultima idSeq feita.
        private void putLastID(string lastID)
        {
            //endereço de onde será gerado o arquivo.
            TextWriter last = new StreamWriter((System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\lastID.txt"));
            
            last.WriteLine(lastID);
            last.Close();
        }

        //permite apenas inserção de números neste campo.
        private void txt_dataEstimada_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Somente números são permitidos neste campo!", "Aviso");
                txt_dataEstimada.Text = "";
                txt_dataEstimada.Focus();
            }
        }

        //permite apenas inserção de números neste campo.
        private void txt_dataReal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Somente números são permitidos neste campo!", "Aviso");
                txt_dataReal.Text = "";
                txt_dataReal.Focus();
            }
        }

        //chama método qeu limpa form anterior e volta para o mesmo.
        private void back()
        {
            FisicoBO.getInstance().ficticios.Clear();
            fisicoReceive.recarregar();
            this.closeForm();//usa método herdado do form default.        
        }

        //muda o ficticio em exibição.
        private void changeFic(ArrayList ficticios, int contador)
        {
            string fic = ficticios[contador].ToString();
            lbl_ficticio.Text = "";
            lbl_ficticio.Text = fic;

        }

        //carrega número de ficticio na label.
        private void frm_fisico2_Load(object sender, EventArgs e)
        {
            ArrayList resultado = FisicoBO.getInstance().ficticios;

            if (resultado.Count > 0)
            {
                for (int i = 0; i < 1; i++)
                {
                    lbl_ficticio.Text = resultado[i].ToString();
                }
            }
            else
            {
                lbl_ficticio.Text = FisicoBO.getInstance().plaqueta;
            }

        }

        //limpa os campos para uma nova inserção.
        private void clear()
        {
            txt_dataEstimada.Text = "0";
            txt_dataReal.Text = "0";
            txt_serial.Text = "";
            txt_complemento.Text = "";
            txt_capacidade.Text = "";
            txt_partNumber.Text = "";
            txt_livre1.Text = "";
            txt_livre2.Text = "";
            txt_livre3.Text = "";
            txt_livre4.Text = "";
            cbo_situacao.SelectedItem = null;
            txt_fornecedor.Text = "";
            txt_tag.Text = "";
            txt_dataEstimada.Focus();
        }

        //checa campos obrigatórios
        private bool checkCampos()
        {
            bool resultado = true;
            if (txt_dataEstimada.Text == "")
            {
                MessageBox.Show("Insira uma data estimada para continuar!", "Data estimada");
                txt_dataEstimada.Focus();
                resultado = false;
            }

            else if (txt_dataReal.Text == "")
            {
                MessageBox.Show("Insira uma data real para continuar!", "Data real");
                txt_dataReal.Focus();
                resultado = false;
            }

            else if (cbo_situacao.SelectedItem == null)
            {
                MessageBox.Show("Selecione uma situação para continuar!","Situação");
                cbo_situacao.Focus();
                resultado = false;
            }
            else 
            {
            }
            return resultado;
        }
    }
}